Refactor built-in policies and how they are exposed - #12
Merged
Conversation
gregoire-mullvad
left a comment
Member
There was a problem hiding this comment.
Thanks for this. I like that the BuiltinPolicy struct hides the LazyLock.
gregoire-mullvad
approved these changes
Feb 4, 2026
faern
force-pushed
the
refactor-builtin-policies
branch
from
February 4, 2026 09:48
6837a8c to
495c5ac
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Before this PR, the only way to access a built-in policy was via
Policy::builtin(name: &str) -> Option<Self>. This provided no compile time guarantee that the policy you tried to use actually existed, and you had to unwrap at runtime to find out. The code also repeated all policy names a bunch of times, which can be error prone and also a bit harder to read.This PR refactors how the library includes the built in policies and exposes them to library users. Key changes include:
Policy::builtin(&str) -> Option<&Policy>for usage when the desired policy name is only known at runtime. For example user specified.staticfor each built in policy. This allows referring directly to a policy in code and get compile time checks if that policy exists.LazyLockto only have to parse them once instead of on each access. But hide theLazyLockfrom the public API to make it possible to change the implementation later.